home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / c / amivogl-mdev / amivogl-mdev.lha / examples / teapot.c < prev    next >
C/C++ Source or Header  |  1997-12-30  |  14KB  |  506 lines

  1.  
  2. #include <stdio.h>
  3.  
  4. #ifdef SGI
  5. #include "gl.h"
  6. #include "device.h"
  7. #include "hershey.h"
  8. #else
  9. #include "vogl.h"
  10. #include "vodevice.h"
  11. #endif
  12.  
  13. /*
  14.  *    Draws Newell's Teapot as a heap of Bezier surface patches.
  15.  */
  16.  
  17.  
  18. #define    TEAPOT        1L
  19.  
  20. /*
  21.  *    Data for the teapot.
  22.  */
  23. #define    NUM_PNTS    306
  24. #define    NUM_PATCH    32 
  25.  
  26. float    xyz[NUM_PNTS][3] = {
  27.     { 1.400,   0.000,   2.400},
  28.     { 1.400,  -0.784,   2.400},
  29.     { 0.784,  -1.400,   2.400},
  30.     { 0.000,  -1.400,   2.400},
  31.     { 1.337,   0.000,   2.531},
  32.     { 1.337,  -0.749,   2.531},
  33.     { 0.749,  -1.337,   2.531},
  34.     { 0.000,  -1.337,   2.531},
  35.     { 1.438,   0.000,   2.531},
  36.     { 1.438,  -0.805,   2.531},
  37.     { 0.805,  -1.438,   2.531},
  38.     { 0.000,  -1.438,   2.531},
  39.     { 1.500,   0.000,   2.400},
  40.     { 1.500,  -0.840,   2.400},
  41.     { 0.840,  -1.500,   2.400},
  42.     { 0.000,  -1.500,   2.400},
  43.     {-0.784,  -1.400,   2.400},
  44.     {-1.400,  -0.784,   2.400},
  45.     {-1.400,   0.000,   2.400},
  46.     {-0.749,  -1.337,   2.531},
  47.     {-1.337,  -0.749,   2.531},
  48.     {-1.337,   0.000,   2.531},
  49.     {-0.805,  -1.438,   2.531},
  50.     {-1.438,  -0.805,   2.531},
  51.     {-1.438,   0.000,   2.531},
  52.     {-0.840,  -1.500,   2.400},
  53.     {-1.500,  -0.840,   2.400},
  54.     {-1.500,   0.000,   2.400},
  55.     {-1.400,   0.784,   2.400},
  56.     {-0.784,   1.400,   2.400},
  57.     { 0.000,   1.400,   2.400},
  58.     {-1.337,   0.749,   2.531},
  59.     {-0.749,   1.337,   2.531},
  60.     { 0.000,   1.337,   2.531},
  61.     {-1.438,   0.805,   2.531},
  62.     {-0.805,   1.438,   2.531},
  63.     { 0.000,   1.438,   2.531},
  64.     {-1.500,   0.840,   2.400},
  65.     {-0.840,   1.500,   2.400},
  66.     { 0.000,   1.500,   2.400},
  67.     { 0.784,   1.400,   2.400},
  68.     { 1.400,   0.784,   2.400},
  69.     { 0.749,   1.337,   2.531},
  70.     { 1.337,   0.749,   2.531},
  71.     { 0.805,   1.438,   2.531},
  72.     { 1.438,   0.805,   2.531},
  73.     { 0.840,   1.500,   2.400},
  74.     { 1.500,   0.840,   2.400},
  75.     { 1.750,   0.000,   1.875},
  76.     { 1.750,  -0.980,   1.875},
  77.     { 0.980,  -1.750,   1.875},
  78.     { 0.000,  -1.750,   1.875},
  79.     { 2.000,   0.000,   1.350},
  80.     { 2.000,  -1.120,   1.350},
  81.     { 1.120,  -2.000,   1.350},
  82.     { 0.000,  -2.000,   1.350},
  83.     { 2.000,   0.000,   0.900},
  84.     { 2.000,  -1.120,   0.900},
  85.     { 1.120,  -2.000,   0.900},
  86.     { 0.000,  -2.000,   0.900},
  87.     {-0.980,  -1.750,   1.875},
  88.     {-1.750,  -0.980,   1.875},
  89.     {-1.750,   0.000,   1.875},
  90.     {-1.120,  -2.000,   1.350},
  91.     {-2.000,  -1.120,   1.350},
  92.     {-2.000,   0.000,   1.350},
  93.     {-1.120,  -2.000,   0.900},
  94.     {-2.000,  -1.120,   0.900},
  95.     {-2.000,   0.000,   0.900},
  96.     {-1.750,   0.980,   1.875},
  97.     {-0.980,   1.750,   1.875},
  98.     { 0.000,   1.750,   1.875},
  99.     {-2.000,   1.120,   1.350},
  100.     {-1.120,   2.000,   1.350},
  101.     { 0.000,   2.000,   1.350},
  102.     {-2.000,   1.120,   0.900},
  103.     {-1.120,   2.000,   0.900},
  104.     { 0.000,   2.000,   0.900},
  105.     { 0.980,   1.750,   1.875},
  106.     { 1.750,   0.980,   1.875},
  107.     { 1.120,   2.000,   1.350},
  108.     { 2.000,   1.120,   1.350},
  109.     { 1.120,   2.000,   0.900},
  110.     { 2.000,   1.120,   0.900},
  111.     { 2.000,   0.000,   0.450},
  112.     { 2.000,  -1.120,   0.450},
  113.     { 1.120,  -2.000,   0.450},
  114.     { 0.000,  -2.000,   0.450},
  115.     { 1.500,   0.000,   0.225},
  116.     { 1.500,  -0.840,   0.225},
  117.     { 0.840,  -1.500,   0.225},
  118.     { 0.000,  -1.500,   0.225},
  119.     { 1.500,   0.000,   0.150},
  120.     { 1.500,  -0.840,   0.150},
  121.     { 0.840,  -1.500,   0.150},
  122.     { 0.000,  -1.500,   0.150},
  123.     {-1.120,  -2.000,   0.450},
  124.     {-2.000,  -1.120,   0.450},
  125.     {-2.000,   0.000,   0.450},
  126.     {-0.840,  -1.500,   0.225},
  127.     {-1.500,  -0.840,   0.225},
  128.     {-1.500,   0.000,   0.225},
  129.     {-0.840,  -1.500,   0.150},
  130.     {-1.500,  -0.840,   0.150},
  131.     {-1.500,   0.000,   0.150},
  132.     {-2.000,   1.120,   0.450},
  133.     {-1.120,   2.000,   0.450},
  134.     { 0.000,   2.000,   0.450},
  135.     {-1.500,   0.840,   0.225},
  136.     {-0.840,   1.500,   0.225},
  137.     { 0.000,   1.500,   0.225},
  138.     {-1.500,   0.840,   0.150},
  139.     {-0.840,   1.500,   0.150},
  140.     { 0.000,   1.500,   0.150},
  141.     { 1.120,   2.000,   0.450},
  142.     { 2.000,   1.120,   0.450},
  143.     { 0.840,   1.500,   0.225},
  144.     { 1.500,   0.840,   0.225},
  145.     { 0.840,   1.500,   0.150},
  146.     { 1.500,   0.840,   0.150},
  147.     {-1.600,   0.000,   2.025},
  148.     {-1.600,  -0.300,   2.025},
  149.     {-1.500,  -0.300,   2.250},
  150.     {-1.500,   0.000,   2.250},
  151.     {-2.300,   0.000,   2.025},
  152.     {-2.300,  -0.300,   2.025},
  153.     {-2.500,  -0.300,   2.250},
  154.     {-2.500,   0.000,   2.250},
  155.     {-2.700,   0.000,   2.025},
  156.     {-2.700,  -0.300,   2.025},
  157.     {-3.000,  -0.300,   2.250},
  158.     {-3.000,   0.000,   2.250},
  159.     {-2.700,   0.000,   1.800},
  160.     {-2.700,  -0.300,   1.800},
  161.     {-3.000,  -0.300,   1.800},
  162.     {-3.000,   0.000,   1.800},
  163.     {-1.500,   0.300,   2.250},
  164.     {-1.600,   0.300,   2.025},
  165.     {-2.500,   0.300,   2.250},
  166.     {-2.300,   0.300,   2.025},
  167.     {-3.000,   0.300,   2.250},
  168.     {-2.700,   0.300,   2.025},
  169.     {-3.000,   0.300,   1.800},
  170.     {-2.700,   0.300,   1.800},
  171.     {-2.700,   0.000,   1.575},
  172.     {-2.700,  -0.300,   1.575},
  173.     {-3.000,  -0.300,   1.350},
  174.     {-3.000,   0.000,   1.350},
  175.     {-2.500,   0.000,   1.125},
  176.     {-2.500,  -0.300,   1.125},
  177.     {-2.650,  -0.300,   0.938},
  178.     {-2.650,   0.000,   0.938},
  179.     {-2.000,  -0.300,   0.900},
  180.     {-1.900,  -0.300,   0.600},
  181.     {-1.900,   0.000,   0.600},
  182.     {-3.000,   0.300,   1.350},
  183.     {-2.700,   0.300,   1.575},
  184.     {-2.650,   0.300,   0.938},
  185.     {-2.500,   0.300,   1.125},
  186.     {-1.900,   0.300,   0.600},
  187.     {-2.000,   0.300,   0.900},
  188.     { 1.700,   0.000,   1.425},
  189.     { 1.700,  -0.660,   1.425},
  190.     { 1.700,  -0.660,   0.600},
  191.     { 1.700,   0.000,   0.600},
  192.     { 2.600,   0.000,   1.425},
  193.     { 2.600,  -0.660,   1.425},
  194.     { 3.100,  -0.660,   0.825},
  195.     { 3.100,   0.000,   0.825},
  196.     { 2.300,   0.000,   2.100},
  197.     { 2.300,  -0.250,   2.100},
  198.     { 2.400,  -0.250,   2.025},
  199.     { 2.400,   0.000,   2.025},
  200.     { 2.700,   0.000,   2.400},
  201.     { 2.700,  -0.250,   2.400},
  202.     { 3.300,  -0.250,   2.400},
  203.     { 3.300,   0.000,   2.400},
  204.     { 1.700,   0.660,   0.600},
  205.     { 1.700,   0.660,   1.425},
  206.     { 3.100,   0.660,   0.825},
  207.     { 2.600,   0.660,   1.425},
  208.     { 2.400,   0.250,   2.025},
  209.     { 2.300,   0.250,   2.100},
  210.     { 3.300,   0.250,   2.400},
  211.     { 2.700,   0.250,   2.400},
  212.     { 2.800,   0.000,   2.475},
  213.     { 2.800,  -0.250,   2.475},
  214.     { 3.525,  -0.250,   2.494},
  215.     { 3.525,   0.000,   2.494},
  216.     { 2.900,   0.000,   2.475},
  217.     { 2.900,  -0.150,   2.475},
  218.     { 3.450,  -0.150,   2.513},
  219.     { 3.450,   0.000,   2.513},
  220.     { 2.800,   0.000,   2.400},
  221.     { 2.800,  -0.150,   2.400},
  222.     { 3.200,  -0.150,   2.400},
  223.     { 3.200,   0.000,   2.400},
  224.     { 3.525,   0.250,   2.494},
  225.     { 2.800,   0.250,   2.475},
  226.     { 3.450,   0.150,   2.513},
  227.     { 2.900,   0.150,   2.475},
  228.     { 3.200,   0.150,   2.400},
  229.     { 2.800,   0.150,   2.400},
  230.     { 0.000,   0.000,   3.150},
  231.     { 0.000,  -0.002,   3.150},
  232.     { 0.002,   0.000,   3.150},
  233.     { 0.800,   0.000,   3.150},
  234.     { 0.800,  -0.450,   3.150},
  235.     { 0.450,  -0.800,   3.150},
  236.     { 0.000,  -0.800,   3.150},
  237.     { 0.000,   0.000,   2.850},
  238.     { 0.200,   0.000,   2.700},
  239.     { 0.200,  -0.112,   2.700},
  240.     { 0.112,  -0.200,   2.700},
  241.     { 0.000,  -0.200,   2.700},
  242.     {-0.002,   0.000,   3.150},
  243.     {-0.450,  -0.800,   3.150},
  244.     {-0.800,  -0.450,   3.150},
  245.     {-0.800,   0.000,   3.150},
  246.     {-0.112,  -0.200,   2.700},
  247.     {-0.200,  -0.112,   2.700},
  248.     {-0.200,   0.000,   2.700},
  249.     { 0.000,   0.002,   3.150},
  250.     {-0.800,   0.450,   3.150},
  251.     {-0.450,   0.800,   3.150},
  252.     { 0.000,   0.800,   3.150},
  253.     {-0.200,   0.112,   2.700},
  254.     {-0.112,   0.200,   2.700},
  255.     { 0.000,   0.200,   2.700},
  256.     { 0.450,   0.800,   3.150},
  257.     { 0.800,   0.450,   3.150},
  258.     { 0.112,   0.200,   2.700},
  259.     { 0.200,   0.112,   2.700},
  260.     { 0.400,   0.000,   2.550},
  261.     { 0.400,  -0.224,   2.550},
  262.     { 0.224,  -0.400,   2.550},
  263.     { 0.000,  -0.400,   2.550},
  264.     { 1.300,   0.000,   2.550},
  265.     { 1.300,  -0.728,   2.550},
  266.     { 0.728,  -1.300,   2.550},
  267.     { 0.000,  -1.300,   2.550},
  268.     { 1.300,   0.000,   2.400},
  269.     { 1.300,  -0.728,   2.400},
  270.     { 0.728,  -1.300,   2.400},
  271.     { 0.000,  -1.300,   2.400},
  272.     {-0.224,  -0.400,   2.550},
  273.     {-0.400,  -0.224,   2.550},
  274.     {-0.400,   0.000,   2.550},
  275.     {-0.728,  -1.300,   2.550},
  276.     {-1.300,  -0.728,   2.550},
  277.     {-1.300,   0.000,   2.550},
  278.     {-0.728,  -1.300,   2.400},
  279.     {-1.300,  -0.728,   2.400},
  280.     {-1.300,   0.000,   2.400},
  281.     {-0.400,   0.224,   2.550},
  282.     {-0.224,   0.400,   2.550},
  283.     { 0.000,   0.400,   2.550},
  284.     {-1.300,   0.728,   2.550},
  285.     {-0.728,   1.300,   2.550},
  286.     { 0.000,   1.300,   2.550},
  287.     {-1.300,   0.728,   2.400},
  288.     {-0.728,   1.300,   2.400},
  289.     { 0.000,   1.300,   2.400},
  290.     { 0.224,   0.400,   2.550},
  291.     { 0.400,   0.224,   2.550},
  292.     { 0.728,   1.300,   2.550},
  293.     { 1.300,   0.728,   2.550},
  294.     { 0.728,   1.300,   2.400},
  295.     { 1.300,   0.728,   2.400},
  296.     { 0.000,   0.000,   0.000},
  297.     { 1.500,   0.000,   0.150},
  298.     { 1.500,   0.840,   0.150},
  299.     { 0.840,   1.500,   0.150},
  300.     { 0.000,   1.500,   0.150},
  301.     { 1.500,   0.000,   0.075},
  302.     { 1.500,   0.840,   0.075},
  303.     { 0.840,   1.500,   0.075},
  304.     { 0.000,   1.500,   0.075},
  305.     { 1.425,   0.000,   0.000},
  306.     { 1.425,   0.798,   0.000},
  307.     { 0.798,   1.425,   0.000},
  308.     { 0.000,   1.425,   0.000},
  309.     {-0.840,   1.500,   0.150},
  310.     {-1.500,   0.840,   0.150},
  311.     {-1.500,   0.000,   0.150},
  312.     {-0.840,   1.500,   0.075},
  313.     {-1.500,   0.840,   0.075},
  314.     {-1.500,   0.000,   0.075},
  315.     {-0.798,   1.425,   0.000},
  316.     {-1.425,   0.798,   0.000},
  317.     {-1.425,   0.000,   0.000},
  318.     {-1.500,  -0.840,   0.150},
  319.     {-0.840,  -1.500,   0.150},
  320.     { 0.000,  -1.500,   0.150},
  321.     {-1.500,  -0.840,   0.075},
  322.     {-0.840,  -1.500,   0.075},
  323.     { 0.000,  -1.500,   0.075},
  324.     {-1.425,  -0.798,   0.000},
  325.     {-0.798,  -1.425,   0.000},
  326.     { 0.000,  -1.425,   0.000},
  327.     { 0.840,  -1.500,   0.150},
  328.     { 1.500,  -0.840,   0.150},
  329.     { 0.840,  -1.500,   0.075},
  330.     { 1.500,  -0.840,   0.075},
  331.     { 0.798,  -1.425,   0.000},
  332.     { 1.425,  -0.798,   0.000}
  333. };
  334.  
  335. int    patches[NUM_PATCH][16] = {
  336.     {  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  16},
  337.     {  4,  17,  18,  19,   8,  20,  21,  22,  12,  23,  24,  25,  16,  26,  27,  28},
  338.     { 19,  29,  30,  31,  22,  32,  33,  34,  25,  35,  36,  37,  28,  38,  39,  40},
  339.     { 31,  41,  42,   1,  34,  43,  44,   5,  37,  45,  46,   9,  40,  47,  48,  13},
  340.     { 13,  14,  15,  16,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60},
  341.     { 16,  26,  27,  28,  52,  61,  62,  63,  56,  64,  65,  66,  60,  67,  68,  69},
  342.     { 28,  38,  39,  40,  63,  70,  71,  72,  66,  73,  74,  75,  69,  76,  77,  78},
  343.     { 40,  47,  48,  13,  72,  79,  80,  49,  75,  81,  82,  53,  78,  83,  84,  57},
  344.     { 57,  58,  59,  60,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96},
  345.     { 60,  67,  68,  69,  88,  97,  98,  99,  92, 100, 101, 102,  96, 103, 104, 105},
  346.     { 69,  76,  77,  78,  99, 106, 107, 108, 102, 109, 110, 111, 105, 112, 113, 114},
  347.     { 78,  83,  84,  57, 108, 115, 116,  85, 111, 117, 118,  89, 114, 119, 120,  93},
  348.     {121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136},
  349.     {124, 137, 138, 121, 128, 139, 140, 125, 132, 141, 142, 129, 136, 143, 144, 133},
  350.     {133, 134, 135, 136, 145, 146, 147, 148, 149, 150, 151, 152,  69, 153, 154, 155},
  351.     {136, 143, 144, 133, 148, 156, 157, 145, 152, 158, 159, 149, 155, 160, 161,  69},
  352.     {162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177},
  353.     {165, 178, 179, 162, 169, 180, 181, 166, 173, 182, 183, 170, 177, 184, 185, 174},
  354.     {174, 175, 176, 177, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197},
  355.     {177, 184, 185, 174, 189, 198, 199, 186, 193, 200, 201, 190, 197, 202, 203, 194},
  356.     {204, 204, 204, 204, 207, 208, 209, 210, 211, 211, 211, 211, 212, 213, 214, 215},
  357.     {204, 204, 204, 204, 210, 217, 218, 219, 211, 211, 211, 211, 215, 220, 221, 222},
  358.     {204, 204, 204, 204, 219, 224, 225, 226, 211, 211, 211, 211, 222, 227, 228, 229},
  359.     {204, 204, 204, 204, 226, 230, 231, 207, 211, 211, 211, 211, 229, 232, 233, 212},
  360.     {212, 213, 214, 215, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245},
  361.     {215, 220, 221, 222, 237, 246, 247, 248, 241, 249, 250, 251, 245, 252, 253, 254},
  362.     {222, 227, 228, 229, 248, 255, 256, 257, 251, 258, 259, 260, 254, 261, 262, 263},
  363.     {229, 232, 233, 212, 257, 264, 265, 234, 260, 266, 267, 238, 263, 268, 269, 242},
  364.     {270, 270, 270, 270, 279, 280, 281, 282, 275, 276, 277, 278, 271, 272, 273, 274},
  365.     {270, 270, 270, 270, 282, 289, 290, 291, 278, 286, 287, 288, 274, 283, 284, 285},
  366.     {270, 270, 270, 270, 291, 298, 299, 300, 288, 295, 296, 297, 285, 292, 293, 294},
  367.     {270, 270, 270, 270, 300, 305, 306, 279, 297, 303, 304, 275, 294, 301, 302, 271}
  368. };
  369.  
  370.  
  371. /*
  372.  * patch basis type
  373.  */
  374.  
  375. Matrix    bezier = {
  376.     {-1.0,    3.0,    -3.0,    1.0},
  377.     {3.0,    -6.0,    3.0,    0.0},
  378.     {-3.0,    3.0,    0.0,    0.0},
  379.     {1.0,    0.0,    0.0,    0.0} 
  380. };
  381.  
  382. Matrix    x, y, z;
  383.  
  384. int main(
  385.   int argc,
  386.   char **argv)
  387. {
  388.     int    i, j, k;
  389.     short    val;
  390.  
  391.  
  392.     fprintf(stderr, "Using %s:\n\n", argv[0]);
  393.  
  394.     fprintf(stderr, "Use the 'q' key to quit\n");
  395.     fprintf(stderr, "Use the 'x' key to rotate about x\n");
  396.     fprintf(stderr, "Use the 'y' key to rotate about y\n");
  397.     fprintf(stderr, "Use the 'z' key to rotate about z\n");
  398.     fprintf(stderr, "Use the 'e' key to enlarge\n");
  399.     fprintf(stderr, "Use the 'r' key to reduce\n");
  400.  
  401.     winopen("teapot");
  402.     qdevice(KEYBD);
  403.     unqdevice(INPUTCHANGE);
  404.  
  405.     color(BLACK);
  406.     clear();
  407.  
  408.     window(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);
  409.     lookat(0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0);
  410.  
  411.     patchcurves(4L, 4L);
  412.     patchprecision(6L, 6L);
  413.     defbasis((short)1, bezier);
  414.     patchbasis(1L, 1L);
  415.  
  416.     /*
  417.      * Make an object with the teapot in it.
  418.      */
  419.  
  420.     makeobj(TEAPOT);
  421.         color(CYAN);
  422.         for (i = 0; i < NUM_PATCH; i++) {
  423.             /*
  424.              * Set up geometry arrays...
  425.              */
  426.             for (j = 0; j < 4; j++) {
  427.                 x[0][j] = xyz[patches[i][j] - 1][0];
  428.                 x[1][j] = xyz[patches[i][j + 4] - 1][0];
  429.                 x[2][j] = xyz[patches[i][j + 8] - 1][0];
  430.                 x[3][j] = xyz[patches[i][j + 12] - 1][0];
  431.  
  432.                 y[0][j] = xyz[patches[i][j] - 1][1];
  433.                 y[1][j] = xyz[patches[i][j + 4] - 1][1];
  434.                 y[2][j] = xyz[patches[i][j + 8] - 1][1];
  435.                 y[3][j] = xyz[patches[i][j + 12] - 1][1];
  436.  
  437.                 z[0][j] = xyz[patches[i][j] - 1][2];
  438.                 z[1][j] = xyz[patches[i][j + 4] - 1][2];
  439.                 z[2][j] = xyz[patches[i][j + 8] - 1][2];
  440.                 z[3][j] = xyz[patches[i][j + 12] - 1][2];
  441.             }
  442.             /*
  443.              * Draw it...
  444.              */
  445.             patch(x, y, z);
  446.         }
  447.     closeobj();
  448.  
  449.     doublebuffer();
  450.     gconfig();
  451.  
  452.     while (1) {
  453.  
  454.         color(BLACK);
  455.         clear();
  456.         callobj(TEAPOT);
  457.  
  458.         swapbuffers();
  459.  
  460.         (void)qread(&val);
  461.  
  462.         switch (val) {
  463.  
  464.         case 'Q':    /* Stop the program */
  465.         case 27:
  466.             gexit();
  467.             exit(0);
  468.  
  469.         case 'X':    /* Obvious isn't it */
  470.             rotate(100, 'x');
  471.             break;
  472.  
  473.         case 'Y':
  474.             rotate(100, 'y');
  475.             break;
  476.  
  477.         case 'Z':
  478.             rotate(100, 'z');
  479.             break;
  480.  
  481.         case 'E':    /* Enlarge */
  482.             scale(1.1, 1.1, 1.1);
  483.             break;
  484.  
  485.         case 'R':    /* Reduce */
  486.             scale(0.9, 0.9, 0.9);
  487.             break;
  488.  
  489.         case 'F':
  490.             for(k=1;k<5;k++)
  491.             {
  492.                 rotate(100, 'x');
  493.                 color(BLACK);
  494.                 clear();
  495.                 callobj(TEAPOT);
  496.  
  497.                 swapbuffers();
  498.             }
  499.             break;
  500.             
  501.         default:
  502.             ;
  503.         }
  504.     }
  505. }
  506.